CALL Вызов подпрограммы

Флаги не меняются.

Команда:

CALL  procedure_name

Логика:

      if FAR CALL (внешний сегмент)
                          PUSH CS
                          CS = dest_seg
                      PUSH IP
                      IP = dest_offset 

CALL передает управление подпрограмме, которая может находиться как внутри текущего сегмента (NEAR-proc), так и вне его (FAR-proc). Этим двум типам CALL соответствуют две различные машинные команды, и команда RET возврата из подпрограммы должна соответствовать типу команды CALL (потенциальная возможность несоответствия возникает, когда подпрограмма и команда CALL ассемблируются раздельно).
Операнды Такт байты (слова)ОбращенияБайтыПример
near-proc19(23)13CALL NEAR_PROC
far-proc28(36)25CALL FAR_PROC
память-указатель1621(29)+EA22-4CALL PROC[SI]
регистр-указатель1616(24)12CALL AX
память-указатель3237(57)+EA42-4CALL [BX].ROUTINE

Примечания:
Если подпрограмма находится в другом сегменте, то процессор засылает в стек сначала текущее значение CS, затем текущее значение IP (IP указывает на команду, следующую за командой CALL), а затем передает управление в подпрограмму. Если же подпрограмма находится в том же сегменте, то процессор засылает в стек сначала текущее значение IP (которое опять же указывает на команду, следующую за командой CALL), а затем передает управление в подпрограмму. CALL также может считать адрес подпрограммы из регистра или из памяти. Эта форма команды CALL называется косвенным вызовом.

Hosted by uCoz